有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Apache Camel库是否会长期保存内存?

我正在使用verbosegc捕获一些数据,并尝试分析我的应用程序的内存使用情况

我有一个模块,将从数据库或第三方提取数据,并将其放入列表对象,然后只返回前端显示

当我选择日期作为日期范围时,它将从数据库中提取数据。 当我选择今天的日期时,我的应用程序将向MQ服务器发送请求,MQ服务器将用xml消息响应我的应用程序。我将使用apachecamel库来处理它

以下是从数据库中提取数据时的verbosegc屏幕截图: enter image description here

如您所见,每次触发搜索功能时,内存使用量都会增加,然后又会下降。所以这是正常的,也是我所期望的

enter image description here

这是从第三方提取数据时的verbosegc屏幕截图。 正如你所看到的,在内存增加后,它将在那里水平放置一段时间,然后只会下降

我怀疑这个组织。阿帕奇。骆驼交换或组织。阿帕奇。骆驼消息或Apache中的那些对象将保留更长的内存时间

下面是我处理来自第三方的xml消息的一些代码:

/**
* Camel Exchange producer template
*/
protected ProducerTemplate< Exchange > template;

@SuppressWarnings("unchecked")
    private < T > T doSend(final Object request, final String headerName,
            final Object headerObject,
            final SendEaiMessageTemplateCallBack callback)
            throws BaseRuntimeException {

        log.debug( "doSend START >> {} ", request );
        if ( this.requestObjectValidator != null
                && requestObjectValidator
                        .requiredValidation( requestObjectValidator ) ) {
            requestObjectValidator.validateRequest( request );
        }

        final Exchange exchange = template.request( to, new Processor( ) {
            public void process(final Exchange exchange) throws Exception {
                exchange.getIn( ).setBody( request );
                if ( headerName != null && headerObject != null ) {
                    exchange.getIn( ).setHeader( headerName, headerObject );
                }
            }
        } );
        log.debug( "doSend >> END >> exchange is failed? {}",
                exchange.isFailed( ) );
        Message outBoundMessage = null;

        if ( callback != null ) {
            // provide the callBack method to access exchange
            callback.exchangeCallBack( exchange );
        }

        if ( exchange.isFailed( ) ) {
            failedHandler.handleExchangeFailed( exchange, request );
        } else {
            outBoundMessage = exchange.getOut( false );
        }

        // handler outbound message
        if ( this.outboundMessageHandler != null ) {
            this.outboundMessageHandler.handleMessage( outBoundMessage );
        }
        if ( outBoundMessage != null ) {
            if ( outBoundMessage.getBody( ) != null ) {
                log.debug( "OutBoundMessage body {}", outBoundMessage.getBody( ) );
            }
            return (T) outBoundMessage.getBody( );
        } else {
            return null;
        }
    }

因此,我的应用程序遇到了内存不足异常。我不确定是不是因为ApacheCamel库,敬请告知

除此之外,当我打开heapdump文件时,有52%的投诉发生在com/ibm/xml/xlxp2/scan/util/SimpleDataBufferFactory$DataBufferLink

另一个是“Java堆仅由这个char[]使用”,这也是DataBufferLink下的一些子类别

我在谷歌上看到的,都是说xml消息太大了

我不知道应该以何种方式或方向继续进行故障排除,能否就此提出建议

仅供参考,我正在使用camel-core-1.5.0。罐子


共 (0) 个答案